package com.csx.governance.traffic.route;

import com.csx.governance.traffic.core.context.TrafficMessage;
import org.springframework.core.Ordered;

import java.util.List;
import java.util.Map;
import java.util.function.Function;

/**
 * <p>服务实例过滤器</p>
 * <p>主要是将原始的服务实例列表 经过 自定义的过滤逻辑过滤后, 返回过滤后的服务实例列表</p>
 * @author cuisongxu
 * @date 2023/2/25 19:19
 */
public interface Filter extends Ordered {

    /**
     * 将指定一组实例按照一定规则进行过滤
     * @param serviceInstances 原实例列表
     * @param metadataMapping 元数据Map
     * @param trafficMessage 请求
     * @param <T> 实例类型
     * @return 过滤后的服务实例列表
     */
    <T> List<T> filter(List<T> serviceInstances, Function<T, Map<String, String>> metadataMapping, TrafficMessage trafficMessage);
}
